widget: add helpers to resolve GActionGroups available to GtkWidget
authorChristian Hergert <christian@hergert.me>
Thu, 11 Dec 2014 23:25:41 +0000 (15:25 -0800)
committerChristian Hergert <christian@hergert.me>
Thu, 11 Dec 2014 23:25:41 +0000 (15:25 -0800)
These functions, while added for use by the GTK inspector, are generally
useful to applications that need to resolve what action groups are
available to a particular GtkWidget.

https://bugzilla.gnome.org/show_bug.cgi?id=741386

docs/reference/gtk/gtk3-sections.txt
gtk/gtkactionmuxer.c
gtk/gtkactionmuxer.h
gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwidgetprivate.h
gtk/inspector/actions.c
gtk/inspector/prop-editor.c

index fb93d29a267dad8062924f0cd1ce8e38963267db..857d0fb2ec0753b16dc629fd2f16ecd252862c00 100644 (file)
@@ -5543,6 +5543,8 @@ gtk_widget_get_modifier_mask
 gtk_widget_insert_action_group
 gtk_widget_get_opacity
 gtk_widget_set_opacity
+gtk_widget_list_action_prefixes
+gtk_widget_get_action_group
 
 <SUBSECTION>
 gtk_widget_get_path
index a1dc9f8110c215762f9f371a9bf3893484cd718c..408973bc2f34b2f3b826b0fe8875ba6a14d05beb 100644 (file)
@@ -732,10 +732,10 @@ gtk_action_muxer_remove (GtkActionMuxer *muxer,
     }
 }
 
-gchar **
+const gchar **
 gtk_action_muxer_list_prefixes (GtkActionMuxer *muxer)
 {
-  return (gchar **) g_hash_table_get_keys_as_array (muxer->groups, NULL);
+  return (const gchar **) g_hash_table_get_keys_as_array (muxer->groups, NULL);
 }
 
 GActionGroup *
index 94b74914094703cfd99a43268d471dcc258cce24..39e9bf2ccedb519fbb9e941a91fc312bd00c45c1 100644 (file)
@@ -41,7 +41,7 @@ void                    gtk_action_muxer_insert                         (GtkActi
 
 void                    gtk_action_muxer_remove                         (GtkActionMuxer *muxer,
                                                                          const gchar    *prefix);
-gchar **                gtk_action_muxer_list_prefixes                  (GtkActionMuxer *muxer);
+const gchar **          gtk_action_muxer_list_prefixes                  (GtkActionMuxer *muxer);
 GActionGroup *          gtk_action_muxer_lookup                         (GtkActionMuxer *muxer,
                                                                          const gchar    *prefix);
 GtkActionMuxer *        gtk_action_muxer_get_parent                     (GtkActionMuxer *muxer);
index 50ca98bf11a717c6df88a29cb9977386e2dab39a..4d54206464cee341b47222a7416ce2b0209be487 100644 (file)
@@ -17037,18 +17037,49 @@ gtk_widget_get_template_child (GtkWidget   *widget,
   return ret;
 }
 
-gchar **
-_gtk_widget_list_action_prefixes (GtkWidget *widget)
+/**
+ * gtk_widget_list_action_prefixes:
+ * @widget: A #GtkWidget
+ *
+ * Retrieves a %NULL-terminated array of strings containing the prefixes of
+ * #GActionGroup's available to @widget.
+ *
+ * Returns: (transfer container): a %NULL-terminated array of strings.
+ *
+ * Since: 3.16
+ */
+const gchar **
+gtk_widget_list_action_prefixes (GtkWidget *widget)
 {
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
   if (widget->priv->muxer)
-    return gtk_action_muxer_list_prefixes (widget->priv->muxer);
-  return NULL;
+      return gtk_action_muxer_list_prefixes (widget->priv->muxer);
+  return g_new0 (const gchar *, 0 + 1);
 }
 
+/**
+ * gtk_widget_get_action_group:
+ * @widget: A #GtkWidget
+ * @prefix: The “prefix” of the action group.
+ *
+ * Retrieves the #GActionGroup that was registered using @prefix. The resulting
+ * #GActionGroup may have been registered to @widget or any #GtkWidget in its
+ * ancestry.
+ *
+ * If no action group was found matching @prefix, then %NULL is returned.
+ *
+ * Returns: (transfer none) (nullable): A #GActionGroup or %NULL.
+ *
+ * Since: 3.16
+ */
 GActionGroup *
-_gtk_widget_get_action_group (GtkWidget   *widget,
-                              const gchar *prefix)
+gtk_widget_get_action_group (GtkWidget   *widget,
+                             const gchar *prefix)
 {
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+  g_return_val_if_fail (prefix, NULL);
+
   if (widget->priv->muxer)
     return gtk_action_muxer_lookup (widget->priv->muxer, prefix);
   return NULL;
index ca961a07279c27b59d611dbc5cd5095e57d95f0a..450cd1968e25a4b410273aee5f3a9023b988e549 100644 (file)
@@ -1475,6 +1475,13 @@ void    gtk_widget_class_bind_template_child_full       (GtkWidgetClass        *
                                                         gboolean               internal_child,
                                                         gssize                 struct_offset);
 
+GDK_AVAILABLE_IN_3_16
+GActionGroup           *gtk_widget_get_action_group                     (GtkWidget    *widget,
+                                                                         const gchar  *prefix);
+
+GDK_AVAILABLE_IN_3_16
+const gchar **          gtk_widget_list_action_prefixes                 (GtkWidget    *widget);
+
 G_END_DECLS
 
 #endif /* __GTK_WIDGET_H__ */
index 6fd7a633463094a9a0d09f5585035330810e49b5..48c9f8cdf43688dfea49f00e08187180620dc80c 100644 (file)
@@ -153,9 +153,6 @@ void              _gtk_widget_style_context_invalidated    (GtkWidget    *widget
 void              _gtk_widget_update_parent_muxer          (GtkWidget    *widget);
 GtkActionMuxer *  _gtk_widget_get_action_muxer             (GtkWidget    *widget,
                                                             gboolean      create);
-gchar **          _gtk_widget_list_action_prefixes         (GtkWidget    *widget);
-GActionGroup *    _gtk_widget_get_action_group             (GtkWidget    *widget,
-                                                            const gchar  *prefix);
 
 void              _gtk_widget_add_controller               (GtkWidget           *widget,
                                                             GtkEventController  *controller);
index 7899bcf09edce297532e778a4ec66f5b387a27c8..ff8e2e1dc0f9a97a0e75053f560ecf010305af45 100644 (file)
@@ -220,12 +220,12 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
       GActionGroup *group;
       gint i;
 
-      prefixes = _gtk_widget_list_action_prefixes (GTK_WIDGET (object));
+      prefixes = gtk_widget_list_action_prefixes (GTK_WIDGET (object));
       if (prefixes)
         {
           for (i = 0; prefixes[i]; i++)
             {
-              group = _gtk_widget_get_action_group (GTK_WIDGET (object), prefixes[i]);
+              group = gtk_widget_get_action_group (GTK_WIDGET (object), prefixes[i]);
               add_group (sl, group, prefixes[i]);
             }
           g_free (prefixes);
index 3649e78bfdad72da7b56aa6f0b654ec43786080b..8a28539114b9ba2c0f43dd7256eb7b24903dd576 100644 (file)
@@ -1262,7 +1262,7 @@ find_action_owner (GtkActionable *actionable)
 
   while (widget != NULL)
     {
-      group = _gtk_widget_get_action_group (widget, prefix);
+      group = gtk_widget_get_action_group (widget, prefix);
       if (group && g_action_group_has_action (group, name))
         return (GObject *)widget;
       widget = action_ancestor (widget);